哈囉,我是麥茶,目前是一名軟體工程師。我主要使用的程式是C++,偶爾搭配一些其他程式,像是Python等等。在我的工作中,常常用到一個編譯器設計工具-Lex & Yacc。對於一些格式固定的檔案,尤其是記憶體龐大的檔案,Lex & Yacc可以快速有效的讀取內容,並可以利用程式將這些內容做後續的應用。有鑑於網路上與Lex & Yacc相關的中文參考資料不多,且多數沒有實際的例子,於是我想透過這次鐵人賽,將我在學習Lex & Yacc的過程與心得用簡單清楚的方式整理出來,希望能幫助到剛接觸這項工具的初學者。
Lex 和 Yacc 都是用於編譯器設計的工具,通常用於處理文本解析和語法分析。它們通常一起使用,協助開發者建立自己的編譯器或解釋器。
Lex 是 "Lexical Analyzer" 的縮寫,它負責將輸入的文本流轉換成一個個的 token,這些 token 是語言中的基本單位,如關鍵字、運算符、數字等。開發者需要使用regular expression(正則表達式)來描述這些 token 的模式,然後 Lex 會根據這些模式將輸入的文本拆分成 token。
Yacc 則是 "Yet Another Compiler Compiler" 的縮寫,它負責處理文本的語法分析,將 token 流轉換成更高層次的語法結構。開發者需要定義文法規則,描述語言中不同元素如何組合成有效的語句。Yacc 根據這些規則建立語法分析器,幫助解析並理解複雜的語句結構。
簡而言之,Lex 負責將文本拆分成基本單位的 token,而 Yacc 則負責根據文法規則分析這些 token,幫助開發者建立編譯器或解釋器。它們在編譯器設計中扮演著重要的角色。
本系列所有的範例皆使用C++,執行環境是Win10系統。
由於Lex 和 Yacc主要的運行環境是UNIX,在Windows系統中,我們可以使用類似的工具 - Flex & Bison。
筆者使用的IDE為VSCode,好處是有Lex & Yacc的套件可以使用,可以使介面更清楚。
如果你已經有基礎的C++程式語言能力,就可以學習上手這項工具囉。
在開始之前,我們先來安裝Lex & Yacc吧!
由於筆者使用環境是Windows系統,所以這裡安裝的會是剛剛提到的Flex & Bison。
安裝的一般步驟如下:
安裝 MinGW-w64:
MinGW-w64 是一個用於 Windows 的開發環境,可讓使用者在 Windows 上編譯和執行類似於 Unix 的工具。使用者可以從 MinGW-w64 官方網站 下載安裝程式。在安裝過程中,請確保選擇適合系統的版本(32 位或 64 位)。安裝完成後,將 MinGW-w64 的 bin
目錄(例如 C:\mingw\bin
)新增到系統環境變數 PATH
中。
安裝 Flex(Lex 的替代工具):
在 MinGW-w64 的命令行中執行以下命令來安裝 Flex:
mingw32-get install msys-flex
這將安裝 Flex 到 MinGW-w64 的環境中。
安裝 Bison(Yacc 的替代工具):
在 MinGW-w64 的命令行中執行以下命令來安裝 Bison:
mingw32-get install msys-bison
這將安裝 Bison 到 MinGW-w64 的環境中。
測試安裝:
開啟命令行終端(使用 MinGW-w64 自帶的 MSYS 終端或其他終端),分別輸入以下命令來檢查安裝是否成功:
檢查 Flex 安裝是否成功:
flex --version
檢查 Bison 安裝是否成功:
bison --version
如果兩者都顯示版本訊息,說明安裝成功。
今天簡單介紹了Lex & Yacc這個編譯器設計工具,並且先安裝好相關套件。我們接下來就能進入Lex & Yacc的世界囉~